package com.xm.linxiaogang.network.converter

import com.alibaba.fastjson.JSON
import com.xm.linxiaogang.network.bean.ResponseBean
import com.xm.linxiaogang.network.bean.ResponseError
import okhttp3.ResponseBody
import retrofit2.Converter
import java.io.IOException
import java.lang.reflect.Type

/**
 * 重构响应体，初步解析数据结构
 *
 */
class FastJsonResponseBodyConverter<T> internal constructor(private val type: Type) :
    Converter<ResponseBody, T> {

    @Throws(IOException::class)
    override fun convert(value: ResponseBody): T {
        val body = value.string()
        val bean: ResponseBean = JSON.parseObject(body, ResponseBean::class.java)
        //请求码等于200表示请求成功,直接返回data数据结构就好（具体根据实际的接口业务来定）
        if (bean.code === 200) {
            //如果返回的data为null时处理成空字符串
            if (type === String::class.java && bean.data == null) {
                bean.data = ""
                return bean.data as T
            }
            return JSON.parseObject(bean.data, type)
        }
        //请求码不等于200表示请求失败，抛出封装好的表示错误的数据结构
        throw ResponseError(bean)
    }
}